package com.boil.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by ChenYong on 2016-09-21.
 * <br>
 * 抽象分页实体类。
 */
public abstract class Page<E> {
    /**
     * 总记录数
     */
    protected long count;
    /**
     * 总页数
     */
    protected long pages;
    /**
     * 每页的记录数，即页码
     */
    protected int pageSize;
    /**
     * 查询条件
     */
    protected Map<String, Object> params;
    /**
     * 数组查询条件
     */
    protected Map<String, List<?>> paramss;
    /**
     * 结果集
     */
    protected List<E> results;

    // 普通初始化块
    {
        this.params = new HashMap<String, Object>();
        this.paramss = new HashMap<String, List<?>>();
        this.results = new ArrayList<E>();
    }

    /**
     * 设置总记录数。
     *
     * @param count 总记录数
     */
    public abstract void setCount(long count);

    /**
     * 获取总记录数。
     *
     * @return 总记录数
     */
    public long getCount() {
        return count;
    }

    /**
     * 获取总页数。
     *
     * @return 总页数
     */
    public long getPages() {
        return pages;
    }

    /**
     * 获取页码。
     *
     * @return 页码
     */
    public int getPageSize() {
        return pageSize;
    }

    /**
     * 获取开始记录数。
     *
     * @return 开始记录数
     */
    public abstract long getStartRecords();

    /**
     * 获取结束记录数。
     *
     * @return 结束记录数
     */
    public abstract long getEndRecords();

    /**
     * 获取查询条件。
     *
     * @return 查询条件
     */
    public Map<String, Object> getParams() {
        return params;
    }

    /**
     * 获取数组查询条件。
     *
     * @return 数组查询条件
     */
    public Map<String, List<?>> getParamss() {
        return paramss;
    }

    /**
     * 获取结果集。
     *
     * @return 结果集
     */
    public List<E> getResults() {
        return results;
    }

    /**
     * 设置结果集。
     *
     * @param results 结果集
     */
    public void setResults(List<E> results) {
        if (results == null) {
            results = new ArrayList<E>();
        }

        this.results = results;
    }
}